home *** CD-ROM | disk | FTP | other *** search
/ Software Vault: The Gold Collection / Software Vault - The Gold Collection (American Databankers) (1993).ISO / cdr49 / actlib13.zip / TOOLS.ZIP / FNREDUCE.C < prev    next >
C/C++ Source or Header  |  1993-05-04  |  2KB  |  63 lines

  1. /*  Copyright (C) 1993   Marc Stern  (internet: stern@mble.philips.be)  */
  2.  
  3. #include "tools.h"
  4. #include <stdlib.h>
  5. #include <direct.h>
  6. #include <stdio.h>
  7. #include <string.h>
  8. #include <ctype.h>
  9.  
  10.  
  11. /***
  12.  *
  13.  *  Function   :    fnreduce
  14.  *
  15.  *  Topics     :    Transforms a filename into a full reduced filename.
  16.  *
  17.  *  Parameters  :  in/out   char *filename    input/reduced filename
  18.  *                  
  19.  *  Return     :    pointer to result
  20.  *
  21.  ***/
  22.  
  23. char *fnreduce( char *filename )
  24.  
  25. { char *ptr1, *ptr2;
  26.   char drive[_MAX_DRIVE], dir[_MAX_DIR], file[_MAX_FNAME], ext[_MAX_EXT];
  27.  
  28.   for ( ptr1 = filename; *ptr1; ptr1 ++ ) if ( *ptr1 == '/' ) *ptr1 = '\\';
  29.  
  30.   _splitpath( filename, drive, dir, file, ext );
  31.  
  32.   if ( ! *drive ) sprintf( drive, "%c:", _getdrive() + 'A'- 1 );
  33.  
  34.   if ( *dir != '\\' ) { char buffer[_MAX_DIR];
  35.                         strcpy( buffer, dir );
  36.                         _getdcwd( toupper(*drive) - 'A' + 1, dir, _MAX_DIR );
  37.                         strcpy( dir, dir + 2 );
  38.                         strcat( dir, "\\" );
  39.                         strcat( dir, buffer );
  40.                       }
  41.  
  42.   for ( ptr1 = dir; *ptr1; ptr1++ )
  43.       if ( *ptr1 == '.' )
  44.          switch( *++ptr1 )
  45.                {
  46.                  case '.' : for ( ptr2 = ptr1 + 1, ptr1 -= 3; *ptr1 != '\\'; ptr1 -- );
  47.                             strcpy( ptr1--, ptr2 );
  48.                             break;
  49.  
  50.                  case '\0':
  51.                  case '\\': strcpy( ptr1 - 2, ptr1 );
  52.                             ptr1 -= 3;
  53.                             break;
  54.  
  55.                  default  : break;
  56.                }
  57.  
  58.   if ( (ptr1 == dir) || (*--ptr1 != '\\') ) strcat( ptr1, "\\" );
  59.  
  60.   _makepath( filename, drive, dir, file, ext );
  61.   return strupr( filename );
  62. }
  63.